package com.xxl.service;

import com.xxl.dto.BlogCommentDto;
import com.xxl.dto.BlogDto;
import com.xxl.dto.CollectBlogDto;
import com.xxl.dto.HomeDto;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

/**
 * blog服务：跟blog一切有关的操作
 * @author xxl
 * @date 2023/3/30
 */
public interface BlogService {
    /**
     * 管理员权限:查询所有的博客(带时间的)，HomeDto参数欠缺用于管理员查询用的
     * @return List<HomeDto> HomeDto实体类对象集合
     */
    List<HomeDto> queryAllBlog();

    /**
     * 查询某一个博客的信息
     * @param uuid  blog的主键
     * @return   BlogDto BlogDto实体类对象
     */
    HomeDto queryBlogByUUID(String uuid);
    /**
     * 通过标题模糊查询博客
     * @param title 标题
     * @return List<HomeDto>  HomeDto实体类对象集合
     */
    List<HomeDto> queryAllBlogByTitle(String title);
    /**
     * 主页展示的博客，这是自动做的
     * @return  List<HomeDto>  HomeDto实体类对象集合
     */
    List<HomeDto> queryAllBlogByTime();
    /**
     * 当前用户发布博客
     * @param  simpleContent 内容简介
     * @param  content 内容
     * @param title 标题
     * @param username  发布博客的用户名
     * @return int > 0 成功
     */
    int postBlog( String title, String content, String simpleContent,String username);

    /**
     * 当前用户删除blog(blog_content数据库)
     * 注意：删除调用此方法必须也需要调用deleteBlog方法
     * @param uuid 博客的主键uuid
     * @return  int > 0 成功
     */
    int deleteBlogByUUID(String uuid);
    /**
     * 删除blog(home_blog数据库)
     * @param uuid 博客的主键uuid
     * @return int > 0 成功
     */
    int deleteBlog(String uuid);
    /**
     * 当前用户修改自己的博客
     * @param t 视图传递的对象
     * @param uuid 博客的主键uuid
     * @return
     */
    <T> int modifyBlogByUUID(String uuid,T t);

    /**
     * 当前用户查询自己写的所有博客
     * @param username 当前用户名
     * @return  List<BlogDto>  BlogDto实体类对象集合
     */
    List<BlogDto> queryAllBLogByUsername(String username);

    /**
     * 查询一条博客下的所有评论
     * @param uuid  博客的主键uuid
     * @return List<BlogCommentDto> BlogCommentDto实体类对象集合
     */
    List<BlogCommentDto> queryAllCommentByUUID(String uuid);

    /**
     * 当前用户发布评论
     * @param t 视图传递对象
     * @return int > 0 成功
     */
    <T>int postComment(T t);

    /**
     * blog的主人删除博客下的评论
     * @param  postCommentUsername 发布评论的用户
     * @param  commentID commentID 评论id
     * @return   int > 0 成功
     */
    int deleteComment(String postCommentUsername,String commentID);

    /**
     * 发布评论的用户删除评论
     * @param commentID 评论id
     * @return int > 0 成功
     */
    int deleteComment(String commentID);

    /**
     * 当前用户收藏的所有博客uuid
     * @param username 当前用户名
     * @return List<String>  返回此用户所有收藏的博客id
     */
    List<String> queryAllBlogByUsername(String username);

    /**
     * 查询某个博客被那些收藏了
     * @param uuid 博客的uuid(32位)
     * @return List<String>  返回收藏此博客所有的用户名
     */
    List<String> findBlogFollowingByUUID(String uuid);

    /**
     * 当前用户收藏博客
     * @param username 当前用户
     * @param uuid 取消关注博客的uuid
     * @return int > 0 成功
     */
    int followingBlog(String username,String uuid);

    /**
     * 当前用户取消关注博客
     * @param username 当前用户
     * @param uuid 关注博客的uuid
     * @return int > 0 成功
     */
    int cancelFollowingBlog(String username,String uuid);

}
